using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._ProjectionsandTransformations
{
    /// <summary>
    /// <para>Batch Project</para>
    /// <para>Changes the coordinate system of a set of input feature classes or feature datasets to a common coordinate system. To change the coordinate system of a single feature class or dataset use the Project tool.</para>
    /// <para>将一组输入要素类或要素数据集的坐标系更改为公共坐标系。要更改单个要素类或数据集的坐标系，请使用投影工具。</para>
    /// </summary>    
    [DisplayName("Batch Project")]
    public class BatchProject : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public BatchProject()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_Input_Feature_Class_or_Dataset">
        /// <para>Input Feature Class or Dataset</para>
        /// <para>The input feature classes or feature datasets whose coordinates are to be converted.</para>
        /// <para>要转换其坐标的输入要素类或要素数据集。</para>
        /// </param>
        /// <param name="_Output_Workspace">
        /// <para>Output Workspace</para>
        /// <para>The location of each new output feature class or feature dataset.</para>
        /// <para>每个新输出要素类或要素数据集的位置。</para>
        /// </param>
        public BatchProject(List<object> _Input_Feature_Class_or_Dataset, object _Output_Workspace)
        {
            this._Input_Feature_Class_or_Dataset = _Input_Feature_Class_or_Dataset;
            this._Output_Workspace = _Output_Workspace;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Batch Project";

        public override string CallName => "management.BatchProject";

        public override List<string> AcceptEnvironments => ["XYResolution", "XYTolerance", "scratchWorkspace", "workspace"];

        public override object[] ParameterInfo => [_Input_Feature_Class_or_Dataset, _Output_Workspace, _Output_Coordinate_System, _Template_dataset, _Transformation, _Derived_Output];

        /// <summary>
        /// <para>Input Feature Class or Dataset</para>
        /// <para>The input feature classes or feature datasets whose coordinates are to be converted.</para>
        /// <para>要转换其坐标的输入要素类或要素数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Feature Class or Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public List<object> _Input_Feature_Class_or_Dataset { get; set; }


        /// <summary>
        /// <para>Output Workspace</para>
        /// <para>The location of each new output feature class or feature dataset.</para>
        /// <para>每个新输出要素类或要素数据集的位置。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Workspace")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _Output_Workspace { get; set; }


        /// <summary>
        /// <para>Output Coordinate System</para>
        /// <para>The coordinate system to be used to project the inputs. The default value is set based on the output coordinate system environment.</para>
        /// <para>用于投影输入的坐标系。默认值是根据输出坐标系环境设置的。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Coordinate System")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _Output_Coordinate_System { get; set; } = null;


        /// <summary>
        /// <para>Template dataset</para>
        /// <para>The feature class or the feature dataset used to specify the output coordinate system used for projection.</para>
        /// <para>用于指定用于投影的输出坐标系的要素类或要素数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Template dataset")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _Template_dataset { get; set; } = null;


        /// <summary>
        /// <para>Transformation</para>
        /// <para>The name of the geographic transformation to be applied to convert data between two geographic coordinate systems (datums).</para>
        /// <para>用于在两个地理坐标系（基准面）之间转换数据的地理变换的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Transformation")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _Transformation { get; set; } = null;


        /// <summary>
        /// <para>Updated Output Workspace</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Output Workspace")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _Derived_Output { get; set; }


        public BatchProject SetEnv(object XYResolution = null, object XYTolerance = null, object scratchWorkspace = null, object workspace = null)
        {
            base.SetEnv(XYResolution: XYResolution, XYTolerance: XYTolerance, scratchWorkspace: scratchWorkspace, workspace: workspace);
            return this;
        }

    }

}